package com.zjsru.leetcode75.level1;

/**
 * @Author: cookLee
 * @Date: 2023-10-05
 * 删掉一个元素以后全为 1 的最长子数组
 */
public class LongestSubarray {

    /**
     * 主
     * \
     * 输入：nums = [1,1,0,1]
     * 输出：3
     * 解释：删掉位置 2 的数后，[1,1,1] 包含 3 个 1
     * \
     * 输入：nums = [0,1,1,1,0,1,1,0,1]
     * 输出：5
     * 解释：删掉位置 4 的数字后，[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1] 。
     * \
     * 输入：nums = [1,1,1]
     * 输出：2
     * 解释：你必须要删除一个元素。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        LongestSubarray longestSubarray = new LongestSubarray();
        int[] nums = new int[]{0,1,1,1,0,1,1,0,1};
        System.out.println(longestSubarray.longestSubarray(nums));
    }

    /**
     * 最长子阵列：滑动窗口
     * 滑动过程中，滑动窗口长度只会增加或不变，长度不会缩小
     * @param nums nums
     * @return int
     */
    public int longestSubarray(int[] nums) {
        int left = 0, right = 0;
        int count = 0;
        while (right < nums.length) {
            if (nums[right] == 0) {
                count++;
            }
            right++;
            if (count > 1) {
                if (nums[left] == 0) {
                    count--;
                }
                left++;
            }
        }
        return right - left - 1;
    }
}
